********************************** * MOUSE.CLOCK Source Code * * By John R. Vokey * * (C) 1991 by MindCraft Publ. * ********************************** ; ; *================================= ; Equates *================================= ; * Set System DOS: PRODOS EQU $21 PRODOS = $21, DOS = 0 ; * Monitor: ACC EQU $45 save A loc on IRQ SAVEA EQU $FC temp for Acc SAVEX EQU SAVEA+1 temp for X reg SAVEY EQU SAVEX+1 temp for Y reg SCREEN EQU $41D 40-col screen position USER EQU $0000 User's interrupt handler ; * Applesoft: CHKCOM EQU $DEBE Check for comma at TXTPTR PTRGET EQU $DFE3 returns variable pointer VARPNT EQU $83 Applesoft pointer ERROR EQU $D412 error routine ; * Mouse: MSLOT EQU $C400 assume slot 4 NUM EQU $FF used as a temp ; * ProDOS: ALLOC EQU $40 allocate interrupt code MLI EQU $BF00 Machine Language Interface DATETIME EQU $BF06 Date/time jump PTIME EQU $BF92 time locations BITMAP EQU $BF58 system bit map GOSYSTEM EQU $BE70 BASIC.SYSTEM command call GETBUFR EQU $BEF5 Get Buffer ERROUT EQU $BE09 error exit ; * DOS 3.3: BUFCNT EQU $AA57 # of buffers to create BUFPTR EQU $9D00 pointer to new buffer BUFBLD EQU $A7D4 build buffers DOSLOC EQU $9C00 relocation page ; * Origin: ORG $4000-$44-PRODOS ; *================================= ; Relocate *================================= ; DO PRODOS LDA #1 ask BASIC.SYSTEM for 1 page JSR GETBUFR BCS BADERR Error STA VARPNT+1 (for move) PHA save it LSR A shift down LSR A LSR A TAX use as index into bitmap PLA EOR #$FF complement AND #$7 mask off high bits SEC TAY LDA #0 clear Acc PLOOP ROL A shift 'Y' times DEY BPL PLOOP ORA BITMAP,X set bit STA BITMAP,X flag "used" LDA VARPNT+1 recover hbyte STA P2 STA P4+1 ; ELSE LDA #>DOSLOC lbyte of space SEC SBC #$26 name, pointers, etc. STA BUFPTR LDA #IHAND P2 DFB IHAND STA $3FE D2 LDA #SAVTIME and point to STA DATETIME+1 time routine P4 LDA #= 10^Y? BCC NUMOUT No, done T5 SBC POFTEN,Y Yes, divide by subtraction STA NUM save remainder PLA count divisions SEC add 1 to Acc ADC #0 PHA save again BCC LOOP always taken NUMOUT PLA recover digit (0-9) ORA #$30 ASCII "0" + digit T6 STA OUTSTR,X save ASCII equivalent INX next output loc DEY next digit BPL INLOOP INX skip delimiter PLA recover Y TAY INY CPY #4 All done? BCC TOUTLP No, go again S1 LDA DSPTGL Yes, display to screen? BEQ ALLDONE No, go LDY #10 else, 11 chars to go S2 LDA OUTSTR,Y get char STA SCREEN,Y store to screen DEY BPL S2 ALLDONE CLC mark successful call ; *================================= ; Exit *================================= ; EXIT DO USER JSR USER do User's handler ELSE NOP NOP NOP FIN ; LDA SAVEA recover regs STA $45 how we were called... LDX SAVEX LDY SAVEY ; DO PRODOS NOP keeps offsets equal RTS ; ELSE CLI for DOS RTI FIN ; *================================= ; Internal variables *================================= ; TIMECNT DFB 3 DSPTGL DFB 0 init to off TIME DFB 0,0,0,0 TIMLIM DFB 24,60,60,100 POFTEN DFB 1,10 MSB OFF OUTSTR ASC '00:00:00 00' PTR DFB 11,>OUTSTR,